昨天的緩衝日把參數化、storageState、多角色和 teardown 串成一次完整的巡檢,30 天的技術內容也到此告一段落。今天是最後一天,我們一起回顧這段時間學習到的重要觀念,並且盤點還有哪些主題值得深入學習。
一開始,我們從 Browser、BrowserContext、Page 這三層架構認識 Playwright。其中最關鍵的是 context:它是測試之間互相隔離的單位,讓每支測試都拿到一個乾淨的瀏覽器環境。後面很多設計,像是用 storageState 保存登入狀態、多角色切換身分等,都是從這個觀念延伸出來的。
接著是 Fixture 與 scope。Fixture 讓我們把登入、準備資料這些重複的步驟抽出來,由 Playwright 自動注入到測試裡;scope 則決定這些 fixture 能活多久、在多個 worker 之間可以被誰共用。
登入是整個系列一直在處理的問題。從每支測試自己登入一次,到用 POM、Fixture 包裝,最後用 Global Setup 搭配 storageState,只登入一次就能讓所有測試共用,測試本身完全不用再管登入。這也是我在工作上覺得最實用的一個觀念。
最後是除錯。測試失敗時,先打開 trace 看它卡在哪裡、在等什麼,而不是憑感覺改程式碼。用 AI 產生測試也一樣,產生出來的程式碼還是要自己看得懂、除得了錯。除了 trace,截圖和影片這些除錯產出物在實務上也很好用,有時候我光看影片就知道問題出在哪。
善用工具找原因跟除錯在面對 Flaky Test 時特別重要,像是在撰寫 Day16、Day17、Day22-23 時,都碰過偶發失敗,原因各不相同,但處理的方向都是先找根因。而調大測試的 timeout 則是最後手段,有時候測試過程太快,從 trace 看不出任何異常,這時可以先把 timeout 調大,讓測試多等一下,才有機會碰到原本沒等到的狀態變化,再搭配 trace 一步一步確認真正的問題所在。
30 天雖然也不是很短的時間,但是能涵蓋的範圍還是有限。為了避免內容太深、初學者不好吸收,這個系列以最核心的基礎為主,有些主題這次就沒有提到。第一個是 CI 整合。自動化測試通常會搭配 CI 一起使用,這次沒能說明整合的做法和可能碰到的問題有點可惜,有機會大家可以再深入研究。
另一個是 UI Mode,它可以在介面上逐步執行測試,並即時看到每一步的畫面,很適合用來撰寫和除錯。一開始有把它排進大綱,但因為自己還沒有足夠的實作經驗,所以決定先拿掉,等真的用熟了再來分享。
這是我第一次參加鐵人賽,也是第一次寫技術文章。因為工作才開始接觸 Playwright,但一直是遇到什麼就查什麼,沒有系統性地把它搞懂。剛好趁這次機會,把觀念從頭整理一遍,同時也順便學習了之前比較沒有碰過的主題,例如 iframe 、 參數化測試與 Mock API。工作上實際碰到的問題,也成了我安排這 30 天學習路徑的依據。希望這樣的安排,對正在學 Playwright 的你也有幫助。
謝謝每一位看到這裡的讀者,我們下次見!